/*
这里介绍一个计算序列全排列的函数：next_permutation（start,end），和prev_permutation（start,end）.
这两个函数作用是一样的，区别就在于前者求的是当前排列的下一个排列，后一个求的是当前排列的上一个排列。
至于这里的“前一个”和“后一个”，我们可以把它理解为序列的字典序的前后，


*/
#include <iostream>  
#include <algorithm>  
using namespace std;  
int main()  
{  
    int num[3]={1,2,3};  
    do  
    {  
        cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;  
    }while(next_permutation(num,num+3));  
    return 0;  
    /*
    输出结果：
        1 2 3
        1 3 2
        2 1 3
        2 3 1
        3 1 2
        3 2 1

    */



    //当我们把while(next_permutation(num,num+3))中的3改为2时，输出就变为了：
    do  
    {  
        cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;  
    }while(next_permutation(num,num+3));
    /*
    输出结果：
        1 2 3
        2 1 3
    */
   //由此可以看出，next_permutation(num,num+n)函数是对数组num中的前n个元素进行全排列，
   //同时并改变num数组的值。
    

    /*
    另外，需要强调的是，next_permutation（）在使用前需要对欲排列数组按升序排序，
    否则只能找出该序列之后的全排列数。比如，如果数组num初始化为2,3,1，那么输出就变为了：
    2 3 1
    3 1 2
    3 2 1
    */
}  
